/****************************************************************************************
* 文件名称: arithmetic.cpp
* 
* 创建时间：2020/07/18
*
* 修改时间：2020/07/18
*
* 作    者：默先
*
* 版    本：V1.0
*
* 文摘描述：算法处理文件
*
* 说    明：
****************************************************************************************/ 
#include "arithmetic.h"

extern u32 SystemHeartbeatCount ;  //! 系统心跳时钟 用这个值作为随机数产生源
/**
 * @brief 数字转字符串
 */
void NumberToChar(int number , char * chr)
{
    int length = 0 , num ;
    if(number < 0) { number = -number ; chr[0] = '-' ; length = 1 ; }
    if(number == 0) { chr[0] = '0' ; return ; } num = number ;
    while(num) { length ++ ; num /= 10 ; }
    while(number) { chr[--length] = number % 10 + '0' ; number /= 10 ; }
}

//! 随机变量表*************************************************************************************
const u8 RandomVariateArray[] =
{
    66  , 104 , 152 , 67  , 154 , 181 , 57  , 30  , 76  , 81  , 108 , 130 , 22  , 67  , 204 , 7  ,
    237 , 186 , 125 , 148 , 61  , 117 , 246 , 139 , 133 , 59  , 125 , 159 , 173 , 101 , 94  , 252, 
    10  , 226 , 233 , 203 , 25  , 67  , 86  , 173 , 35  , 184 , 27  , 167 , 126 , 199 , 182 , 230,
    227 , 85  , 178 , 50  , 8   , 190 , 128 , 122 , 231 , 156 , 158 , 219 , 205 , 147 , 47  , 61 ,
    226 ,  7  , 125 , 43  , 250 , 182 , 128 , 120 , 15  , 174 , 11  , 18  , 133 , 25  , 209 , 208,
    184 , 38  , 168 , 132 , 248 , 165 , 204 , 116 , 110 , 210 , 21  , 34  , 44  , 100 , 212 , 205,
    15  , 102 , 134 , 106 , 167 , 160 , 74  , 110 , 4   , 251 , 43  , 27  , 95  , 51  , 125 , 87 ,
    243 , 235 , 13  , 188 , 69  , 108 , 140 , 240 , 107 , 251 , 77  , 179 , 170 , 137 , 178 , 170,
    66  , 104 , 152 , 67  , 154 , 181 , 57  , 30  , 76  , 81  , 108 , 130 , 22  , 67  , 204 , 7  ,
    237 , 186 , 125 , 148 , 61  , 117 , 246 , 139 , 133 , 59  , 125 , 159 , 173 , 101 , 94  , 252, 
    10  , 226 , 233 , 203 , 25  , 67  , 86  , 173 , 35  , 184 , 27  , 167 , 126 , 199 , 182 , 230,
    227 , 85  , 178 , 50  , 8   , 190 , 128 , 122 , 231 , 156 , 158 , 219 , 205 , 147 , 47  , 61 ,
    226 ,  7  , 125 , 43  , 250 , 182 , 128 , 120 , 15  , 174 , 11  , 18  , 133 , 25  , 209 , 208,
    184 , 38  , 168 , 132 , 248 , 165 , 204 , 116 , 110 , 210 , 21  , 34  , 44  , 100 , 212 , 205,
    15  , 102 , 134 , 106 , 167 , 160 , 74  , 110 , 4   , 251 , 43  , 27  , 95  , 51  , 125 , 87 ,
    243 , 235 , 13  , 188 , 69  , 108 , 140 , 240 , 107 , 251 , 77  , 179 , 170 , 137 , 178 , 170
};     

/**
 * @brief  异或加密处理
 **/
void Xor_Encryption_Deal(u8 * buffer , u8 secret , u8 len)
{
    for(int i = 0 ; i < len ; ++ i) buffer[i] ^= RandomVariateArray[(secret + i) % 256] ;
}

/**
 * @brief  获取一个字节的随机数
 * @param  index  异或索引值
 **/
u8 Get_One_Byte_Random_Number(u8 index)
{
    return (SystemHeartbeatCount % 256) ^ RandomVariateArray[index] ;
}

/**
 * @brief  两个简单的字符串是否相等
 * @param  str1 : 比较字符串1
 *         str2 : 比较字符串2
 *         len  : 比较字符串长度
 *
 * @return 0 : 相同
 *         1 : 不相同
 **/
u8 Is_Simple_Eual_Str(u8 * str1 , u8 *str2 , int len)
{
    Assert_Param(NULL != str1) ; 
    Assert_Param(NULL != str2) ; 
  
    for(int i = 0 ; i < len ; ++ i)
    {
        if(str1[i] != str2[i]) return 1 ;
    }
    
    return 0 ;
}
